iT邦幫忙

2024 iThome 鐵人賽

DAY 24
1
生成式 AI

2024 年用 LangGraph 從零開始實現 Agentic AI System系列 第 24

【Day 24】- GraphRAG:革新檢索增強生成的新範式

  • 分享至 

  • xImage
  •  

摘要
這篇文章介紹了一種名為 GraphRAG 的新型檢索增強生成技術,它由微軟研究團隊提出,旨在突破傳統 RAG 方法在處理複雜資訊時的局限性。GraphRAG 的核心思想是將原始文本轉化為一個結構化的知識圖譜,並通過社群層級摘要的方式來增強大型語言模型(LLM)的理解和推理能力。
文章首先闡述了傳統 RAG 方法的不足,包括關聯性推理不足和語義理解受限。接著,文章介紹了 GraphRAG 的核心優勢,包括全域問題解決能力、語義關聯捕捉以及大規模資訊綜合。
文章的後半部分則深入探討了 GraphRAG 的機制,包括索引階段和查詢階段。索引階段主要涉及將文本分割、提取實體、關係和聲明描述,並構建知識圖譜。查詢階段則利用社群結構生成社群摘要,並根據查詢需求提供答案。
文章最後還介紹了 GraphRAG 的評估方法和效果,並展示了如何使用 GraphRAG 來執行索引和查詢操作。通過一系列實驗和比較,證明了 GraphRAG 在處理複雜查詢時的優勢,能夠提供更全面、多樣化的回答,同時保持高度的忠實度。

前言

在人工智慧和自然語言處理領域,檢索增強生成(Retrieval-Augmented Generation,RAG)技術一直是提升大型語言模型(LLM)輸出品質的關鍵方法。然而,隨著資料複雜度的提升,傳統 RAG 方法在處理複雜資訊和全域性問題時遇到了瓶頸。為此,微軟研究團隊提出了一種創新方法——GraphRAG,旨在突破這些限制,為 RAG 技術注入新的活力。

上GraphRAG 首圖

1. GraphRAG:構建智慧橋樑

GraphRAG 是一種結構化、分層的檢索增強生成方法。它通過從原始文本中提取知識圖譜、構建社群層次結構,並為這些社群生成摘要。與傳統基於純文本片段的語義搜索相比,大幅提升了處理複雜 RAG 任務的能力。這種方法不僅提高了資訊檢索的精確度,更為 AI 系統提供了理解和推理複雜資訊的新途徑。

2. GraphRAG 想解決什麼問題?

檢索增強生成(Retrieval-Augmented Generation, RAG)技術通過整合現實世界資訊來優化大型語言模型(LLM)的輸出。作為大多數 LLM 驅動工具的核心組件,傳統 RAG 方法主要依賴向量相似度搜索,作者稱之為「基線 RAG」。
然而,在處理複雜資訊時,基線 RAG 存在明顯局限性:

  1. 關聯性推理不足:難以有效連接分散在不同資訊片段中的相關要點。
  2. 大規模語義理解受限:在綜合理解跨文檔或大型單一文檔的語義概念時表現欠佳。

為突破這些瓶頸,微軟研究團隊提出了 GraphRAG 方法。

3. GraphRAG 核心優勢

圖片:GraphRAG 架構示意圖

GraphRAG 利用 LLM 構建基於輸入語料庫的知識圖譜,並結合社群層級摘要(Community-level Summary)和知識圖譜機器學習輸出,在查詢時增強提示效果。這種創新方法在以下方面展現出顯著優勢:

  1. 全域問題解決能力:相較於傳統 RAG,GraphRAG 在處理涉及整個數據集的「全域問題」時表現卓越。
  2. 語義關聯捕捉:通過知識圖譜,更有效地捕捉和利用資訊間的語義關聯。
  3. 大規模資訊綜合:採用社群摘要(Community summarization)與映射-歸約(Map-Reduce)技術,保留全域數據上下文,提供更全面、精準的回答。

💡 亮點提示:GraphRAG 不僅提高了問答的準確性,還增強了 AI 系統對複雜信息的理解和推理能力。

4. GraphRAG 機制的具體運作方式

GraphRAG 論文圖 1

GraphRAG 的工作流程主要分為兩個階段:索引(Indexing)和查詢(Query)。每個階段又包含多個細部流程。讓我們深入探討每個流程的細節。

4.1 索引階段(Indexing)

索引階段的核心任務是從文字文件中提取資訊並構建知識圖譜(knowledge graph)。這個過程可以分為以下幾個步驟:

4.1.1 文件分割:從文字文件到文字區塊(Text Chunks)

首先,我們需要將輸入的文字文件分割成適當大小的文字區塊。這個步驟非常重要,因為區塊大小會影響後續的資訊提取效果:

  • 小型區塊(如 600 個 tokens):可以捕捉更多的實體引用
  • 大型區塊(如 2400 個 tokens):可能會遺漏部分細節資訊

💡 提示:在實際應用中,可以根據文件的特性和需求來調整區塊大小,以達到最佳的平衡。

4.1.2 實體提取:從文字區塊到元素實例(Element Instances)

在這個步驟中,我們利用大型語言模型(LLM)從文字中提取三種關鍵元素:

  1. 實體(Entities)
  2. 關係(Relations)
  3. 聲明描述(Statement Descriptions)

這些提取出來的元素會被轉化為圖元素描述。雖然可能會出現實體引用格式不一致的情況,但 LLM 具備識別變體背後共通實體的能力。

4.1.3 資訊匯總:從元素實例到圖元素摘要(Element Summaries)

接下來,LLM 會再次匯總這些實例,將它們轉化為描述性文字。我們的目標是提供:

  • 豐富的描述性文字
  • 適合 LLM 處理的格式
  • 滿足全局查詢摘要需求的內容

4.1.4 社群結構建立:從圖元素摘要到圖社群(Graph Communities)

最後,我們採用 Leiden 演算法將加權無向圖劃分為節點社群,以恢復圖的層次化社群結構。這個過程會生成一個便於全局摘要的社群層次結構。

📊 專業術語解釋

  • Leiden 演算法:一種用於識別網路中社群結構的演算法,特別適用於大規模複雜網路的分析。

4.2. 查詢(Query)

在這個階段,利用圖節點的社群結構形成多層次的主題概述,以回應查詢需求。

4.2.1 從圖社群到社群摘要(Community Summaries)

為每個社群生成摘要,有助於用戶理解數據集的整體架構和語義。這些摘要會:

  • 依據節點的重要性進行優先級排序
  • 添加到語言模型的上下文中,直至滿載

4.2.2 從社群摘要到社群答案,再到全局答案(Community Answers → Global Answer)

收到用戶查詢後,先前生成的社群概要經過多階段處理,形成最終答案。這一過程中:

  • 綜合不同層級的社群概要
  • 提示最適合回答問題的層級

4.3 🔑 關鍵點:

  1. GraphRAG 通過多層次的資訊處理,實現了更精確的知識提取和查詢回答。
  2. LLM 在整個過程中扮演關鍵角色,從文本提取到摘要生成都依賴其能力。
  3. 社群結構的建立有助於更有效地組織和利用大規模知識圖譜。

4.4 換句話說 GraphRAG

為了更好地理解 GraphRAG 的實際應用,讓我們以一個手搖飲店的例子來說明:

假設我們需要回答以下兩個問題:

  1. 上個月熱河街分店哪個品項銷售最好?
  2. 熱河街分店的整體績效如何?

問題ㄧ就很好仰賴 RAG 處理,這個具體的資訊其實在文件中可以直接撈到。問題二就沒這麼直覺,你需要先整理好資訊之後,再進行推理才可以得出答案。登登!這時候就是先把公司文檔切割好之後,將相近資料擺放在一起,接者在針對每一堆分類好的資訊整理出重點,就樣就是生成出社區(Community)後,再交給 LLM 進行產生社區總結(Cimmunity Summary)。

上圖片示意:文黨當中找出 entity -(LLM)→生成知識圖譜—(社區挖掘)—>樹狀結構

一言以蔽之:GraphRAG的核心在於其獨特的知識表徵方式。通過構建高度結構化的知識圖譜,它能夠捕捉實體間複雜的語義關係,從而實現多維度的信息關聯。這種方法不僅大幅提升了查詢效率,更為語境感知和推理能力的提升奠定了基礎。
值得注意的是,GraphRAG引入的社群挖掘算法進一步增強了其在處理大規模、高度互聯數據時的效能。這種算法能夠識別知識網絡中的關鍵節點和社群結構,從而優化信息的聚合和檢索過程。這一特性使GraphRAG在處理跨領域、多層次的複雜查詢時表現出色。

5. GraphRAG 機制的評估方法與效果

考慮到我們的 Graph RAG 機制的多階段性質、需要比較的多種條件,以及缺乏針對活動型理解問題的標準答案,我們採用了一種頭對頭比較的方法,使用大型語言模型(LLM)作為評估器。

5.1 評估指標

我們選擇了三個目標指標來衡量理解活動所需的品質,以及一個作為有效性指標的控制指標(直接性)。值得注意的是,由於直接性實際上與全面性和多樣性相對,我們並不期望任何方法能在所有四個指標上都勝出。

使用 LLM 評估器計算的頭對頭比較指標如下:

  1. 全面性(Comprehensiveness):回答在涵蓋問題的所有方面和細節時提供了多少細節?
  2. 多樣性(Diversity):回答在提供不同觀點和見解方面有多豐富多樣?
  3. 賦權性(Empowerment):回答在多大程度上幫助讀者理解主題並做出明智判斷?
  4. 直接性(Directness):回答多具體和清晰地解答了問題?

評估結果顯示,GraphRAG 在處理複雜查詢時展現出顯著優勢:

  • 在全面性方面,GraphRAG 的勝率達到 72-83%(Podcast 轉錄文本)和 72-80%(新聞文章)。
  • 在多樣性方面,GraphRAG 的勝率為 75-82%(Podcast 轉錄文本)和 62-71%(新聞文章)。

根據結果來看:GraphRAG 系統在處理複雜查詢時展現出顯著優勢,能夠提供更全面、多樣化的回答,同時保持高度的忠實度。這些結果表明,GraphRAG 在資訊檢索和回答生成領域取得了實質性進展,特別適合需要深入理解和多角度分析的應用場景。 然而,值得注意的是,在直接回答簡單問題時,傳統的 RAG 系統可能更為高效。這提醒我們,在實際應用中應根據具體需求選擇合適的系統。

6. GraphRAG 的官方實作指南

要開始使用 GraphRAG,您可以按照以下步驟進行:

  1. 安裝 GraphRAG:
    pip install -q graphrag
    
  2. 初始化項目:
    mkdir -p ./ragtest/input
    python -m graphrag.index --init --root ./ragtest
    

這個指令會在 ./ragtest 目錄中生成兩個關鍵文件:

  • .env:包含運行 GraphRAG pipeline 所需的環境變數。
  • settings.yaml:包含 pipeline 的詳細設置。
  1. 配置 GraphRAG
    現在,我們需要 YAML 設定檔。這個文件是 GraphRAG 的核心配置,定義了索引和查詢的運作方式。
    Graph Config

  2. 準備範例文件
    為了演示 GraphRAG 的功能,我們需要準備一個輸入文件。這裡我們使用古騰堡計劃中的免費圖書《查爾斯狄更斯的聖誕頌歌》作為示例。

%%writefile /content/ragtest/input/sample.txt

MARLEY'S GHOST

Marley was dead, to begin with. There is no doubt whatever about that.
The register of his burial was signed by the clergyman, the clerk, the
undertaker, and the chief mourner. Scrooge signed it. And Scrooge's name
was good upon 'Change for anything he chose to put his hand to. Old
Marley was as dead as a door-nail.
  1. 執行索引過程:

    python -m graphrag.index --root ./ragtest
    

    這個過程可能需要一些時間,具體取決於您的輸入數據大小、使用的模型以及配置的文本塊大小。

    成功提示:當您看到類似下面的輸出時,表示知識圖譜建立完成:
    圖片:索引完成的控制台輸出

  2. 執行查詢:

    • 全域搜索:
      全域搜索允許我們針對整個數據集提出廣泛的問題:
      python -m graphrag.query --root ./ragtest --method global "本次故事的故事線有哪些?"
      

    檢索結果

## 故事情節概述
本次故事聚焦於艾比尼澤·史克魯奇的轉變過程,主要通過他的內心掙扎與聖誕節幽靈的互動,展示反思、救贖以及個人選擇如何影響當前的行為。史克魯奇從一個吝嗇鬼轉變為慷慨的人,在三個幽靈的啟示下,反思了自己的過去、現在與未來,最終接受了聖誕節的精神以及人際關係的重要性【資料來源:報告 (55, 28, 60, 34)】。

### 主要情節

1. **史克魯奇的轉變**  
故事的核心是史克魯奇的轉變過程,強調節日如何激發個人的改變,並促進慷慨與同理心的價值觀。這一轉變與史克魯奇從一個吝嗇鬼到一個仁慈人物的旅程息息相關,突顯了聖誕節在推動善良與救贖方面的重要性【資料來源:報告 (59)】。

2. **與幽靈的互動**  
史克魯奇與已故商業夥伴雅各布·馬利的關係至關重要,馬利的幽靈提醒史克魯奇反思自己貪婪與自私的生活方式,強調同理心與改變的重要性【資料來源:報告 (41, 54, 17)】。此外,史克魯奇與三個幽靈的互動展示了他對自身生活選擇的反思,促使他尋求救贖【資料來源:報告 (8)】。

3. **克拉奇特一家**  
克拉奇特一家,特別是小提姆,象徵著貧困與希望,他們的故事展示了家庭的愛與團結,以及在經濟困難中仍保持樂觀的精神。這一對比突顯了節日如何在艱難的環境中促進家庭與社區的連結【資料來源:報告 (35, 49), (37)】。

### 結論

整體而言,故事通過史克魯奇的轉變、與幽靈的互動、克拉奇特一家、家庭價值觀以及社會責任等多條情節線,展現了聖誕節的精神與人際關係的重要性。這些元素共同構成了一個關於反思、救贖與改變的深刻故事。
  • 局部搜索:
    局部搜索適合深入研究特定實體及其詳細信息:
    python -m graphrag.query --root ./ragtest --method local "誰是 Marley?"
    
    檢索結果
### Marley 的角色
在查爾斯·狄更斯的《聖誕頌歌》中,Marley 是主角 Ebenezer Scrooge 的已故商業夥伴。他在故事開始時已經去世七年,並且他的幽靈在故事中扮演著重要的角色。Marley 的出現不僅是對 Scrooge 過去生活的提醒,也是他改變的催化劑。

### Marley 的背景
Marley 的幽靈以一種可怕的形象出現,身上纏繞著由他生前的貪婪和自私所造成的鏈條,這些鏈條象徵著他在世時的罪行和後果。他的外貌令人毛骨悚然,這使得 Scrooge 不得不面對自己未來可能的命運。Marley 的出現強調了生活中缺乏同情心和善良的後果,並警告 Scrooge 必須改變自己的行為,否則將面臨同樣的命運 [Data: Entities (39, 81, 16); Relationships (134, 126, 66)]。

### Marley 的影響
Marley 的幽靈不僅是對 Scrooge 的警告,他的出現也引發了 Scrooge 對自己生活的反思。Marley 的訪問促使 Scrooge 開始思考自己的行為和選擇,並最終引導他走向改變和救贖的道路。這一過程中,Marley 的角色不僅是過去的象徵,也是未來可能改變的希望 [Data: Relationships (126, 134, 165)]。

總之,Marley 是一個關鍵角色,他的存在不僅影響了 Scrooge 的命運,也強調了故事中關於悔恨和救贖的主題。

視覺化選項

為了更好地理解和分析 GraphRAG 的結果,您有以下視覺化選項:

  1. 使用 GraphRAG Visualizer 導入 artifacts 文件

📌 注意:關注 官方 GitHub issue 以獲取最新的可視化討論和更新。

圖片:GraphRAG 可視化示例

結語

GraphRAG 代表了檢索增強生成技術的一次重大進步。通過結合知識圖譜和分層結構,它為處理複雜查詢和大規模數據分析提供了新的可能性。儘管在某些簡單任務上傳統 RAG 可能更為直接,但 GraphRAG 在需要深入理解和多角度分析的場景中展現出了巨大潛力。

隨著技術的不斷發展,我們期待看到 GraphRAG 在各個領域的更多應用,以及它如何進一步推動 AI 系統的智能化和效能提升。

即刻前往教學程式碼 Repo,玩玩看官方提供的 GraphRAG 套件吧!別忘了給專案按個星星並持續關注更新,讓我們一起探索AI代理的新境界。

X.GraphRAG參考資料

  1. 網友:https://twitter.com/GPTDAOCN/status/1812852483640934869
  2. 介紹 Graph網友https://bratanic-tomaz.medium.com/
  3. GraphRAG 論文https://arxiv.org/pdf/2404.16130
  4. MS GraphRAG 專案介紹 https://github.com/microsoft/graphrag/blob/main/RAI_TRANSPARENCY.md#what-can-graphrag-do
  5. GraphPipeline圖源:https://thisisrishi.medium.com/exploring-graphrag-with-implementation-fce5a634f18b
  6. https://gradientflow.substack.com/p/graphrag-design-patterns-challenges
  7. https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/
  8. https://arc.net/l/quote/ufzgymls
  9. https://www.graphrag.club/
  10. https://www.bilibili.com/video/BV17i421h7wL/?vd_source=2c63cc6b8c93944a3482094bc7635bd4
  11. https://www.linkedin.com/pulse/%E8%AF%A6%E8%A7%A3ms%E7%9A%84graphrag%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%B5%81%E7%A8%8B-boyang-zhou-wvytc/
  12. https://neo4j.com/developer-blog/neo4j-graphrag-workflow-langchain-langgraph/

上一篇
【Day 23】- Adaptive-RAG:動態檢索策略提高系統問答精準度
下一篇
【Day 25】- 數位轉型下的工安革命:知識圖譜與LangGraph的完美結合
系列文
2024 年用 LangGraph 從零開始實現 Agentic AI System31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言